package language;

import java.io.Serializable;
import java.util.Iterator;
import java.util.LinkedList;

/**
 * La classe permette di definire una produzione.
 * In particolare contiene:
 * parte sinistra, ovvero i non terminali;
 * parte destra, quindi terminali/non terminali;
 * parte relativa alla semantica.
 * @author valerio
 */
public class Produzione implements Serializable{

    private NonTerminale parteSinistra;
    private String regolaSemantica;
    private LinkedList<Element> parteDestra;
    
    public Produzione(){
        
    }
    
    public Produzione(NonTerminale parteSinistra, LinkedList<Element> parteDestra) {
        this.parteSinistra = parteSinistra;
        this.parteDestra = parteDestra;
        regolaSemantica="";
    }

    public Produzione(NonTerminale parteSinistra, LinkedList<Element> parteDestra, String regolaSemantica) {
        this(parteSinistra, parteDestra);
        this.regolaSemantica = regolaSemantica;
    }
    
       
    public NonTerminale getParteSinistra() {
        return parteSinistra;
    }

    public void setParteSinistra(NonTerminale parteSinistra) {
        this.parteSinistra = parteSinistra;
    }

    public String getRegolaSemantica() {
        return regolaSemantica;
    }

    public void setRegolaSemantica(String regolaSemantica) {
        this.regolaSemantica = regolaSemantica;
    }

    public LinkedList<Element> getParteDestra() {
        return parteDestra;
    }
    
    public void addElementToVectorDx( Element e) {
        parteDestra.add(e);
    }
    public String stampaParteDestra(){
        String s = ""; 
        Iterator<Element> it = parteDestra.iterator();
        while(it.hasNext()){
            s = s + it.next().getName()+ " ";
        }
        return s;
    }
    @Override
    public String toString() {
        return parteSinistra + "->" + stampaParteDestra();
    }
}
